﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sebrae.Academico.Trilhas.Dominio.Classes;
using Sebrae.Academico.Trilhas.BM.Classes;
using Sebrae.Academico.InfraEstrutura.Core.UnitOfWork;

namespace Sebrae.Academico.Trilhas.BP
{
    public class ManterTrilha : BusinessProcessBase
    {

        private BMTrilha trilha;

        public ManterTrilha()
            : base()
        {
            trilha = new BMTrilha(unitOfWork);
        }

        private void ValidarTrilhaInformada(Trilha ptrilha)
        {
            // Validando se a instância da trilha está nula.
            trilha.ValidarInstancia(ptrilha);

            //Validand se a trilha está 
            if (String.IsNullOrWhiteSpace(ptrilha.Nome))
                throw new Exception("Nome informado está vazio.");
        }

        public void IncluirTrilha(Trilha ptrilha)
        {

            try
            {

                ValidarTrilhaInformada(ptrilha);

                if (trilha.BuscarporNome(ptrilha).Count > 0)
                {
                    throw new Exception("Já existe um regstro de trilha com este nome.");
                }

                //unitOfWork.IniciarTransacao();
                ptrilha.DataAlteracao = DateTime.Now;
                trilha.Salvar(ptrilha);

                //unitOfWork.Commit();
            }

            catch (Exception ex)
            {
                //unitOfWork.Rollback();
                throw ex;
            }

        }



        public void AlterarTrilha(Trilha pTrilha)
        {
            IUnitOfWork unitOfWork = null;

            try
            {
                unitOfWork = new UnitOfWork();
                ValidarTrilhaInformada(pTrilha);
                pTrilha.DataAlteracao = DateTime.Now;

                trilha.Salvar(pTrilha);

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public IList<Trilha> ObterTrilhas()
        {
            return trilha.ObterTrilhas();
        }

        public void ExcluirTrilha(Trilha pTrilha)
        {

            if (pTrilha.Nome == null || pTrilha.Nome.Trim().Length == 0)
            {
                pTrilha = trilha.ObterPorId(pTrilha.ID);
            }

            trilha.ExcluirTrilha(pTrilha);
        }

        public Trilha ObterTrilhaporId(int pIdTrilha)
        {
            return trilha.ObterPorId(pIdTrilha);
        }

        public IList<Trilha> ObterTrilhaPorNome(string pNome)
        {
            return trilha.ObterTrilhaPorNome(pNome);
        }
    }
}
